Unique Binary Search Trees

Given n, how many structurally unique BST‘s (binary search trees) that store values 1…n?

For example,

Given n = 3, there are a total of 5 unique BST’s.

  1. 1 3 3 2 1
  2. \ / / / \ \
  3. 3 2 1 1 3 2
  4. / / \ \
  5. 2 1 2 3

Solution:

  1. public class Solution {
  2. public int numTrees(int n) {
  3. if (n == 0)
  4. return 0;
  5. int[] dp = new int[n + 1];
  6. dp[0] = 1;
  7. for (int i = 1; i <= n; i++) {
  8. for (int j = 1; j <= i; j++) {
  9. dp[i] += dp[j - 1] * dp[i - j];
  10. }
  11. }
  12. return dp[n];
  13. }
  14. }